]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
status/remote-access: Visualize recordings as screen recording
authorJonas Ådahl <jadahl@gmail.com>
Tue, 21 Apr 2020 16:06:06 +0000 (18:06 +0200)
committerJonas Ådahl <jadahl@gmail.com>
Fri, 31 Jul 2020 08:51:12 +0000 (10:51 +0200)
If a remote access is marked as a recording, visualize it the same way
as a built in recording. Also don't stop it if there is an actual screen
sharing going on, so that one can use a plain "recording" while still
disabling what is an actual screen sharing.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1372

js/ui/status/remoteAccess.js

index 09b8fd8c9210b7ec9dbae7ab5d0e4ec1e4af0f6a..feafe61550229296d67b387662ccd73f04be35a4 100644 (file)
@@ -24,7 +24,8 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator {
             return;
 
         this._handles = new Set();
-        this._indicator = null;
+        this._sharedIndicator = null;
+        this._recordingIndicator = null;
         this._menuSection = null;
 
         controller.connect('new-handle', (o, handle) => {
@@ -33,32 +34,49 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator {
     }
 
     _ensureControls() {
-        if (this._indicator)
+        if (this._sharedIndicator && this._recordingIndicator)
             return;
 
-        this._indicator = this._addIndicator();
-        this._indicator.icon_name = 'screen-shared-symbolic';
-        this._indicator.add_style_class_name('remote-access-indicator');
-        this._item =
+        this._sharedIndicator = this._addIndicator();
+        this._sharedIndicator.icon_name = 'screen-shared-symbolic';
+        this._sharedIndicator.add_style_class_name('remote-access-indicator');
+
+        this._sharedItem =
             new PopupMenu.PopupSubMenuMenuItem(_("Screen is Being Shared"),
                                                true);
-        this._item.menu.addAction(_("Turn off"),
-                                  () => {
-                                      for (let handle of this._handles)
-                                          handle.stop();
-                                  });
-        this._item.icon.icon_name = 'screen-shared-symbolic';
-        this.menu.addMenuItem(this._item);
+        this._sharedItem.menu.addAction(_("Turn off"),
+            () => {
+                for (let handle of this._handles) {
+                    if (!handle.is_recording)
+                        handle.stop();
+                }
+            });
+        this._sharedItem.icon.icon_name = 'screen-shared-symbolic';
+        this.menu.addMenuItem(this._sharedItem);
+
+        this._recordingIndicator = this._addIndicator();
+        this._recordingIndicator.icon_name = 'media-record-symbolic';
+        this._recordingIndicator.add_style_class_name('screencast-indicator');
+    }
+
+    _isScreenShared() {
+        return [...this._handles].some(handle => !handle.is_recording);
+    }
+
+    _isRecording() {
+        return [...this._handles].some(handle => handle.is_recording);
     }
 
     _sync() {
-        if (this._handles.size == 0) {
-            this._indicator.visible = false;
-            this._item.visible = false;
+        if (this._isScreenShared()) {
+            this._sharedIndicator.visible = true;
+            this._sharedItem.visible = true;
         } else {
-            this._indicator.visible = true;
-            this._item.visible = true;
+            this._sharedIndicator.visible = false;
+            this._sharedItem.visible = false;
         }
+
+        this._recordingIndicator.visible = this._isRecording();
     }
 
     _onStopped(handle) {
@@ -70,9 +88,7 @@ class RemoteAccessApplet extends PanelMenu.SystemIndicator {
         this._handles.add(handle);
         handle.connect('stopped', this._onStopped.bind(this));
 
-        if (this._handles.size == 1) {
-            this._ensureControls();
-            this._sync();
-        }
+        this._ensureControls();
+        this._sync();
     }
 });